import axios from 'axios';

export default {
  namespaced: true,
  state() {
    return {
      // 购物车的数据  [{}, {}]
      list: [],
    };
  },
  mutations: {
    updateList(state, newList) {
      state.list = newList;
    },
    // obj: {id, newCount}
    updateCount(state, obj) {
      // 根据id找到要修改的具体对象
      const goods = state.list.find((item) => item.id === obj.id);
      goods.count = obj.newCount;
    },
  },
  actions: {
    // 请求方式：get
    // 请求地址：http://localhost:3000/cart
    async getList(context) {
      const res = await axios.get('http://localhost:3000/cart');
      console.log(res);
      context.commit('updateList', res.data);
    },

    /*
    * 请求方式：patch
    * 请求地址：http://localhost:3000/cart/id
    * 请求参数：
    * {
    *   name: '新值'，
    *   price: '新值',
    *   count: '新值',
    *   thumb: '新值'
    * }
    *  */
    async updateCountAsync(context, obj) {
      // 修改更新同步到后台
      await axios.patch(`http://localhost:3000/cart/${obj.id}`, {
        count: obj.newCount,
      });
      // 将修改同步到vuex
      context.commit('updateCount', {
        id: obj.id,
        newCount: obj.newCount,
      });
    },
  },
  getters: {
    // 商品总数量
    total(state) {
      return state.list.reduce((sum, item) => sum + item.count, 0);
    },
    // 商品总价格
    totalPrice(state) {
      return state.list.reduce((sum, item) => sum + item.count * item.price, 0);
    },
  },
};
